1.数据集“Movies Dataset from Pirated Sites”的数据分析

1.1 将数据读入为DataFrame,并展示数据中的数据类型

由上述数据类型和数据展示可以判断,“id”、“appropriate_for”、“language”、“industry”等属性为标称属性;“IMDb-rating”、“downloads”等属性为数值属性。

1.2 处理部分属性数据

可删去“Unnamed: 0”这个与数据分析无关的属性列。

将“run_time”、“downloads”、“views”转为float型数据。

将“posted_date”和“release_date”转为datetime数据。

1.2 展示数据摘要

(1)首先,检查统计的电影是否有重复,进行去重处理,将数值属性数据的最大值保留。

(2)接着,展示标称属性的值和频数统计,此处将给出每种可能值的频数统计,并且将展示频数的TOP20的柱状图。

对于“appropriate_for”中的Unrated和Not Rated进一步处理:

接着画出柱状图:

统计“language”属性中具体语言种类与频数:

对于上映日期和平台发布日期,通过直方图展示其分布。

(3)下一步,展示数值属性的5数概括及缺失值个数,并通过直方图展示数据分布及离群点。

1.3 处理缺失值

由上述结果可知,appropriate_for属性几乎有一半的数据缺失,缺失率高达42.6%;storyline、run_time、director、writer属性的缺失值较多,分别为7.7%、5.9%、9.2%、10.7%。

用不同方法处理缺失值:

(1)将缺失部分剔除:按行删去含有任意空值的数据

根据上述结果,可以发现,若删去含空值行,数据量将变为仅原先的一半,由先前的分析可以知道删去的数据大多是因为缺少“appropriate_for”值,显然这样的处理是不合理的。

可以根据删除前后的部分属性的柱状图来对比新旧数据差异:

(2)用最高频率值来填补缺失值

对于标称属性,用最高频率值填充缺失值,并不会影响其分布,只是最高频率值的频率将增加,仍以appropriate_for属性为例:

展示经过删除缺失值和用最高频率填充缺失值这两种方法的数值属性的盒图对比:

(3)通过属性的相关关系来填补缺失值

针对缺失率最高的appropriate_for属性,我们尝试使用计算其与其他属性的相关系数来填补缺失值。

首先将appropriate_for的值进行编码,用spearman方法计算相关系数,并画出热力图。

我们可以从热图中看到,appropriate_for与其他属性是弱相关的(不大于0.3)。其中,我们可以发现IMDb-rating是所有属性中最相关的属性,故利用IMDb-ranking来完成这个补全。但,根据相关系数值我们可以猜测使用属性之间的相关性来替换列appropriate_for中的缺失值并不是好的处理。

展示填充前后柱状图对比:

(4)通过数据对象之间的相似性来填补缺失值

针对缺失率最高的appropriate_for属性,我们尝试使用计算数据对象间的相似性来填补缺失值。首先对数值属性进行归一化(regularit函数);接着,计算各个例子的数值属性的均方差,找到最相似的例子的appropriate_for的取值填充。

鉴于数据维度较大,运行时间过长,将只展示填充数据前3000行的填充效果:

2.数据集“GitHub Dataset”的数据分析

2.1 将数据读入为DataFrame,并展示数据中的数据类型

由上述数据类型和数据展示可以判断,“repositories”、“language”这两个属性为标称属性;“stars_count”、“forks_count”、“issues_count”、“pull_requests”、“contributors”属性为数值属性。

2.2 展示数据摘要

(1)首先,检查数据是否有重复,进行去重处理。

(2)接着,展示标称属性的值和频数统计,此处将给出每种可能值的频数统计,并且将展示频数的TOP20的柱状图。

以下将处理“repositories”属性,将对该属性的值进行分词处理,例如“octocat/Hello-World”,将以“/”为分词符提取作者名“octcoat”和项目名“Hello-World”,并将作者名与项目名存入github_data数据中,分别为“author”和“project”,两者均为标称属性。

(3)下一步,展示数值属性的5数概括及缺失值个数,并通过直方图和盒图展示数据分布及离群点。

2.3 处理缺失值

由以上结果可知,仅“language”属性含缺失值,接下来用4种方法填充“language”中的缺失值:

(1)将缺失部分剔除:按行删去含有任意空值的数据

由上面的结果可知,本数据的数据量较小,且数据中空值较少,因此删去空值后数据保留率可达到86%,是效果较为理想。

(2)用最高频率值来填补缺失值

(3)通过属性的相关关系来填补缺失值

由相关系数热力图可以看出,“language”属性与其他的数值属性的相关度不高,可以猜测,利用属性的相关关系来填充数据效果将不一定理想。此处,我尝试选择利用“forks_count”属性来填充“language”属性的缺失值。

(4)通过数据对象之间的相似性来填补缺失值